home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib06.dsk / BUDGET TRAC.bas < prev    next >
BASIC Source File  |  2023-02-26  |  16KB  |  397 lines

  1. 10  REM   **************************
  2. 20  REM   *   APPLE BUDGET TRAC    *
  3. 30  REM   *    BY CHRIS EXNER      *
  4. 40  REM   *   COPYRIGHT (C) 1981   *
  5. 50  REM   *   BY MICRO-SPARC INC   *
  6. 60  REM   *   LINCOLN, MA. 01773   *
  7. 70  REM   **************************
  8. 72  GOTO 100
  9. 80  REM  ';' PRINTING
  10. 81  PRINT  SPC( PK -SY)V$;
  11. 82 SY = SY +(PK -SY) + LEN(V$)
  12. 83  RETURN 
  13. 85  REM  END OF LINE PRINTING
  14. 86  PRINT  SPC( PK -SY)V$
  15. 87 PK = 0:SY = 0
  16. 88  RETURN 
  17. 100  TEXT : HOME : HTAB 11: PRINT "** BUDGET TRAC **"
  18. 110  PRINT : PRINT "     THIS SYSTEM WILL ALLOW YOU TO SET"
  19. 120  PRINT "UP A MONTHLY BUDGET FOR TWENTY-FOUR "
  20. 130  PRINT "EXPENSE ACCOUNTS.  YOU MAY THEN COMPARE"
  21. 140  PRINT "YOUR ACTUAL EXPENSES (GATHERED FROM"
  22. 150  PRINT "TRAC FILES 'BALANCES', 'CARD #' "
  23. 160  PRINT "AND 'CHECK #') VERSUS YOUR BUDGETED"
  24. 170  PRINT "EXPENSES.
  25. 175  REM  * ACCEPT OUTPUT DEVICE
  26. 180  VTAB 11: PRINT "ENTER THE REPORT OUTPUT DEVICE": PRINT "YOU WISH TO USE."
  27. 190  HTAB 10: PRINT "1 = SCREEN ONLY"
  28. 195  HTAB 10: PRINT "2 = PRINTER"
  29. 200 U = 16: VTAB U: INVERSE : INPUT "ENTER YOUR SELECTION: ";PRTYPE$:PRTYPE =  VAL(PRTYPE$): NORMAL 
  30. 210  IF PRTYPE < >1  AND PRTYPE < >2  THEN  GOSUB 2100: GOTO 200
  31. 220  REM  * ACCEPT REPORT DATE
  32. 230  VTAB 23: INVERSE : INPUT "ENTER REPORT DATE (MO,DY,YR): ";RMO,RDY,RYR: NORMAL 
  33. 240  IF (RMO <1  OR RMO >12)  OR (RDY <1  OR RDY >31)  THEN  GOSUB 2100: GOTO 230
  34. 300 D$ =  CHR$(4): REM  CTRL-D
  35. 310  DIM ACCT$(49),BGT(49),BAL(49,12)
  36. 320  DIM MPRCT(24),BPRCT(24),TACCT(24)
  37. 330  DIM MNAME$(12)
  38. 1000  REM  *** MAIN MENU ***
  39. 1010  HOME : HTAB 13: PRINT "* MAIN MENU *"
  40. 1015  VTAB 23: PRINT "ENTER SLASH (/) TO RETURN TO MAIN MENU"
  41. 1020  VTAB 4: PRINT "1 = ENTER ACCOUNT NAMES"
  42. 1030  PRINT "2 = SET-UP MONTH BUDGET"
  43. 1040  PRINT "3 = REPORT/LIST OPTIONS"
  44. 1050  PRINT "4 = END"
  45. 1060 U = 10: VTAB U: INVERSE : INPUT "ENTER YOUR SELECTION: ";PR$:OM =  VAL(PR$): NORMAL 
  46. 1070  IF OM = 1  THEN  GOTO 3000
  47. 1080  IF OM = 2  THEN  GOTO 5000
  48. 1090  IF OM = 3  THEN  GOTO 7000
  49. 1100  IF OM = 4  THEN  END 
  50. 1110  GOSUB 2100: GOTO 1060
  51. 2000  REM  ** GENERAL PURPOSE ROUTINES
  52. 2100  IF PR$ = "/"  THEN  POP : GOTO 1000
  53. 2110  VTAB 23: CALL  -958: PRINT  CHR$(7)"INVALID ENTRY.. PLEASE REENTER": FOR X = 1 TO 1100: NEXT X: VTAB U: CALL  -958: RETURN 
  54. 2150  VTAB 23: PRINT "INVALID ENTRY.. PLEASE REENTER": RETURN 
  55. 2200  VTAB 23: PRINT "INVALID LENGTH..MUST BE 1 - 16 CHARS."
  56. 2210  RETURN 
  57. 2300  VTAB 23: PRINT "AMOUNT > REMAINING ";RBGT: RETURN 
  58. 2400 Q = P:P =  ABS(P)
  59. 2410 C = (P > = 10) +(P > = 100) +(P > = 1000) +(P > = 10000)
  60. 2415  IF P <1  AND P >0  THEN C = C -1: REM  LINE UP CENTS ONLY #'S
  61. 2420  IF Q <0  THEN C = C +1
  62. 2430  RETURN 
  63. 2900  PRINT "CHECK APPLESOFT MANUAL PG.136 FOR ERR."
  64. 2910  PRINT "THE ERROR IS #"; PEEK(222);"LOCATED IN LINE# "; PEEK(218) + PEEK(219) *256
  65. 2920  END 
  66. 3000  REM  * LOAD ACCOUNT TABLE ROUTINE
  67. 3010  ONERR  GOTO 3900
  68. 3020  FLASH : PRINT "LOADING ACCOUNTS ": NORMAL :R = 0
  69. 3025 FDSW = 1
  70. 3030  PRINT D$"OPEN ACCOUNTS,L30"
  71. 3040  PRINT D$"READ ACCOUNTS,R0"
  72. 3050  IF FDSW = 1  THEN  INPUT R
  73. 3060  FOR X = 1 TO 24
  74. 3070  PRINT D$"READ ACCOUNTS,R";X
  75. 3080  IF FDSW = 1  THEN  INPUT ACCT$(X)
  76. 3090  NEXT X
  77. 3100  PRINT D$"CLOSE ACCOUNTS"
  78. 3105  ONERR  GOTO 2900
  79. 3110  IF SW = 1  THEN SW = 0: GOTO 7130: REM  RETURN TO LIST ACCTS
  80. 3120  IF SW = 2  THEN SW = 0: GOTO 7530: REM  RETURN TO BGT COMPARISON
  81. 3500  REM  * ENTER ACCOUNT NAME 
  82. 3510  HOME : HTAB 8: PRINT "** ENTER ACCOUNT NAMES **"
  83. 3520  VTAB 5: INVERSE : PRINT "VALID EXPENSE ACCOUNT#'S ARE 1-24": PRINT "TYPE 'END' FOR MAIN MENU": NORMAL 
  84. 3530 U = 9: VTAB U: CALL  -958: INPUT "ACCOUNT NO: ";PR$:A$ = PR$
  85. 3540  IF A$ = "END"  THEN  GOTO 3700
  86. 3550 A =  INT( VAL(A$))
  87. 3560  IF A <1  OR A >24  THEN  GOSUB 2100: GOTO 3530
  88. 3565  IF ACCT$(A) = ""  THEN  GOTO 3610
  89. 3570  VTAB 11: CALL  -868: PRINT "ACCOUNT NAME: ";ACCT$(A)
  90. 3580  VTAB 20: INVERSE : INPUT "ANY CHANGE? (Y/N) ";X$: NORMAL 
  91. 3590  IF X$ = "N"  THEN  GOTO 3530
  92. 3600  IF X$ < >"Y"  THEN  GOSUB 2100: GOTO 3580
  93. 3610  VTAB 11: CALL  -868: INPUT "ACCOUNT NAME: ";ACCT$(A)
  94. 3620  IF  LEN(ACCT$(A)) <1  OR  LEN(ACCT$(A)) >16  THEN  GOSUB 2200: GOTO 3610
  95. 3630  GOTO 3530
  96. 3700  REM  * WRITE OUT ACCOUNTS
  97. 3710  ONERR  GOTO 2900
  98. 3715  FLASH : PRINT "WRITING ACCOUNTS FILE": NORMAL 
  99. 3720  PRINT D$"OPEN ACCOUNTS,L30"
  100. 3730  PRINT D$"WRITE ACCOUNTS,R0"
  101. 3740  PRINT R
  102. 3750  FOR X = 1 TO 24
  103. 3760  PRINT D$"WRITE ACCOUNTS,R";X
  104. 3770  PRINT ACCT$(X): NEXT X
  105. 3780  PRINT D$"CLOSE ACCOUNTS"
  106. 3790  GOTO 1000: REM  RETURN TO MAIN MENU
  107. 3900  REM  * ACCOUNTS ERROR RTN
  108. 3910 ER =  PEEK(222): POKE 216,0: IF ER < >5  THEN 2900
  109. 3920  PRINT D$"CLOSE ACCOUNTS"
  110. 3925  PRINT D$"OPENACCOUNTS,L30"
  111. 3930  FOR X = 1 TO 24:ACCT$(X) = "": NEXT X
  112. 3940  IF R < >49  THEN R = 24: REM  ACCOUNTS IS SHARED BY INCOME TRAC
  113. 3950 FDSW = 0: RESUME 
  114. 5000  REM  ** ENTER MONTHLY BUDGET 
  115. 5005  HOME : HTAB 8: PRINT "* ENTER BUDGET OPTIONS *"
  116. 5010  PRINT : PRINT "1 = SET-UP NEW BUDGET"
  117. 5015  PRINT "2 = CHANGE BUDGET ENTRIES"
  118. 5020 U = 6: VTAB U: INVERSE : INPUT "ENTER YOUR SELECTION: ";PR$:BM =  VAL(PR$): NORMAL 
  119. 5025  IF BM = 1  THEN  GOTO 5040
  120. 5030  IF BM = 2  THEN  GOTO 6500
  121. 5035  GOSUB 2100: GOTO 5020
  122. 5040  VTAB 8: PRINT "SETTING UP A NEW MONTHLY BUDGET": PRINT "WILL OVERLAY THE EXISTING BUDGET."
  123. 5045  VTAB 11: CALL  -958: INVERSE : INPUT "SET UP A NEW BUDGET? (Y/N) ";X$: NORMAL 
  124. 5050  IF X$ = "N"  THEN  GOTO 1000: REM  RETURN TO MAIN MENU
  125. 5055  IF X$ < >"Y"  THEN  GOSUB 2100: GOTO 5045
  126. 5060  FOR X = 1 TO 24:BGT(X) =  -999: NEXT X: REM  INIT BGT TABLE
  127. 5200  VTAB 3: CALL  -958
  128. 5210  PRINT "THE COMPUTER WILL ALLOCATE THE"
  129. 5220  PRINT "BUDGET TOTAL TO EACH 'UNSET' "
  130. 5230  PRINT "EXPENSE ACCOUNT ACCORDING TO ITS"
  131. 5240  PRINT "HISTORICAL CONTRIBUTION TO TOTAL "
  132. 5245  PRINT "SPENDING."
  133. 5250  PRINT : INPUT "ENTER BUDGET TOTAL: ";TBGT
  134. 5255 RBGT = TBGT
  135. 5260  VTAB 10: CALL  -958: PRINT "IS THERE A BUDGET AMOUNT"
  136. 5270  INPUT "YOU WOULD LIKE TO SET? (Y/N) ";X$
  137. 5280  IF X$ = "N"  AND BM = 1  THEN  GOTO 5500
  138. 5285  IF X$ = "N"  AND BM = 2  THEN  GOTO 6200
  139. 5290  IF X$ < >"Y"  THEN  GOSUB 2100: GOTO 5260
  140. 5300  REM  * ENTER FIXED BUDGET AMTS
  141. 5310 U = 14: VTAB U: INPUT "ENTER ACCOUNT #: ";PR$:A =  VAL(PR$)
  142. 5320 A =  INT(A): IF A <1  OR A >24  THEN  GOSUB 2100: GOTO 5310
  143. 5330 U = 16: VTAB U: INPUT "ENTER BUDGET AMOUNT: ";PR$:BGT(A) =  VAL(PR$)
  144. 5340  IF BGT(A) <0  THEN  GOSUB 2100: GOTO 5330
  145. 5350  IF BM = 1  AND BGT(A) >RBGT  THEN  GOSUB 2300: GOTO 5330
  146. 5360 RBGT = RBGT -BGT(A)
  147. 5370  GOTO 5260
  148. 5500  REM  ** GATHER ACTUAL EXPENSES RTN    
  149. 5510  REM  * READ YTD BALANCES
  150. 5515  ONERR  GOTO 5555
  151. 5520  FLASH : PRINT "READING YTD FILES": NORMAL 
  152. 5522 FDSW = 1
  153. 5525  PRINT D$"OPEN BALANCES"
  154. 5530  PRINT D$"READ BALANCES"
  155. 5535  FOR X = 1 TO 24: FOR N = 1 TO 12
  156. 5540  IF FDSW = 1  THEN  INPUT BAL(X,N)
  157. 5545  NEXT N,X
  158. 5550  GOTO 5565
  159. 5555  REM  * YTD ERROR RTN
  160. 5560 ER =  PEEK(222): POKE 216,0: IF ER < >5  THEN 2900
  161. 5561  PRINT D$"CLOSEBALANCES"
  162. 5562  PRINT D$"OPENBALANCES"
  163. 5563 FDSW = 0: RESUME 
  164. 5565  PRINT D$"CLOSE BALANCES"
  165. 5570  REM  * ADD CARD FILE
  166. 5575  ONERR  GOTO 5630
  167. 5580  FLASH : PRINT "READING CARD# FILE": NORMAL 
  168. 5582 FDSW = 1
  169. 5585  PRINT D$"OPEN CARD #,L40"
  170. 5590  PRINT D$"READ CARD #,R0"
  171. 5595  IF FDSW = 1  THEN  INPUT R
  172. 5600  FOR X = 1 TO R
  173. 5605  PRINT D$"READ CARD #,R";X
  174. 5610  IF FDSW = 1  THEN  INPUT A,CNO,MO,DY,AMT
  175. 5615  IF FDSW = 1  THEN BAL(A,MO) = BAL(A,MO) +AMT
  176. 5620  NEXT X
  177. 5625  GOTO 5645
  178. 5630  REM  * CARD ERROR RTN
  179. 5635 ER =  PEEK(222): POKE 216,0
  180. 5640  IF ER < >5  THEN  GOTO 2900
  181. 5641  PRINT D$"CLOSECARD #"
  182. 5642  PRINT D$"OPEN CARD #,L40"
  183. 5643 FDSW = 0: RESUME 
  184. 5645  PRINT D$"CLOSE CARD #"
  185. 5650  REM  * ADD CHECK FILE
  186. 5655  ONERR  GOTO 5800
  187. 5660  FLASH : PRINT "READING CHECK # FILE": NORMAL 
  188. 5662 FDSW = 1
  189. 5665  PRINT D$"OPEN CHECK #,L40"
  190. 5670  PRINT D$"READ CHECK #,R0"
  191. 5675  IF FDSW = 1  THEN  INPUT R
  192. 5680  FOR X = 1 TO R
  193. 5685  PRINT D$"READ CHECK #,R";X
  194. 5690  INPUT A,CNO,MO,DY,AMT
  195. 5695 BAL(A,MO) = BAL(A,MO) +AMT
  196. 5700  NEXT X
  197. 5750  GOTO 5820
  198. 5800  REM  * CHECK ERROR RTN
  199. 5810 ER =  PEEK(222): POKE 216,0: IF ER < >5  THEN  GOTO 2900
  200. 5811  PRINT D$"CLOSE CHECK #"
  201. 5812  PRINT D$"OPEN CHECK #,L40"
  202. 5813 FDSW = 0: RESUME 
  203. 5820  PRINT D$"CLOSE CHECK #"
  204. 5825  ONERR  GOTO 2900
  205. 5830  IF SW = 2  THEN SW = 0: GOTO 7520: REM  RETURN TO BUDGET COMPARISON
  206. 6000  REM  * CALCULATE MONTH AVERAGES
  207. 6010 GTACCT = 0
  208. 6020  FOR A = 1 TO 24
  209. 6030  IF BGT(A) < > -999  THEN  GOTO 6080: REM  SKIP 'SET' ACCTS
  210. 6035 TACCT(A) = 0
  211. 6040  FOR M = 1 TO 12
  212. 6050 TACCT(A) = TACCT(A) +BAL(A,M)
  213. 6060 GTACCT = GTACCT +BAL(A,M)
  214. 6070  NEXT M
  215. 6080  NEXT A
  216. 6085  IF GTACCT = 0  THEN GTACCT = 1
  217. 6090  FOR A = 1 TO 24
  218. 6100  IF BGT(A) < > -999  THEN  GOTO 6120: REM  SKIP SET ACCTS
  219. 6110 BGT(A) = (TACCT(A)/GTACCT) *RBGT
  220. 6115 BGT(A) =  INT(BGT(A) +.5)
  221. 6120  NEXT A
  222. 6200  REM  *WRITE OUT BUDGET FILE
  223. 6205  FLASH : PRINT "WRITING BUDGETS FILE": NORMAL 
  224. 6210  PRINT D$"OPEN BUDGETS"
  225. 6220  PRINT D$"WRITE BUDGETS"
  226. 6230  PRINT 24
  227. 6235  FOR A = 1 TO 24
  228. 6240  PRINT BGT(A)
  229. 6245  NEXT A
  230. 6250  PRINT D$"CLOSE BUDGETS"
  231. 6255  PRINT D$
  232. 6260  GOTO 1000: REM  MAIN MENU
  233. 6500  REM  * CHANGE SPECIFIC BUDGET ENTRIES
  234. 6505  REM  *LOAD BGT TABLE RTN
  235. 6510 TBGT = 0: FOR X = 1 TO 24:BGT(X) = 0: NEXT X
  236. 6515  ONERR  GOTO 6590
  237. 6517  FLASH : PRINT "LOADING BUDGETS": NORMAL 
  238. 6518 FDSW = 1
  239. 6520  PRINT D$"OPEN BUDGETS"
  240. 6525  PRINT D$"READ BUDGETS"
  241. 6530  IF FDSW = 1  THEN  INPUT R
  242. 6535  IF R >24  THEN R = 24
  243. 6540  FOR X = 1 TO R
  244. 6550  IF FDSW = 1  THEN  INPUT BGT(X)
  245. 6555 TBGT = TBGT +BGT(X)
  246. 6560  NEXT X
  247. 6562  GOTO 6567
  248. 6565 ER =  PEEK(222): POKE 216,0: IF ER < >5  THEN  GOTO 2900
  249. 6567  PRINT D$"CLOSE BUDGETS"
  250. 6568  PRINT D$
  251. 6569  ONERR  GOTO 2900
  252. 6570  IF SW = 1  THEN SW = 0: GOTO 7120
  253. 6575  IF SW = 2  THEN SW = 0: GOTO 7540
  254. 6580  HOME : HTAB 9: PRINT "* CHANGE BUDGET AMTS *"
  255. 6585  GOTO 5260: REM  UTILIZE THE UPDATE LOGIC OF THE SET-UP BUDGET OPTION
  256. 6590  PRINT D$"CLOSE BUDGETS"
  257. 6592  PRINT D$"OPEN BUDGETS"
  258. 6594 FDSW = 0: RESUME 
  259. 7000  REM  ** REPORT OPTIONS
  260. 7010  HOME : HTAB 10: PRINT "* REPORT OPTIONS *"
  261. 7020  PRINT : PRINT "1 = LIST ACCOUNTS & BUDGET"
  262. 7030  PRINT "2 = ACTUAL VS BUDGET COMPARISON"
  263. 7040 U = 6: VTAB U: INVERSE : INPUT "ENTER SELECTION: ";PR$:RP =  VAL(PR$): NORMAL 
  264. 7050  IF RP = 1  THEN  GOTO 7100
  265. 7060  IF RP = 2  THEN  GOTO 7500
  266. 7070  GOSUB 2100: GOTO 7040
  267. 7100  REM  ** LIST ACCOUNTS
  268. 7110 SW = 1: GOTO 6505: REM  LOAD BGT TABLE
  269. 7120 SW = 1: GOTO 3000: REM  LOAD ACCT NAMES
  270. 7130  IF PRTYPE = 2  THEN  GOTO 7300: REM  LIST ACCTS ON PRINTER
  271. 7200  REM  ** LIST ACCOUNTS ON SCREEN
  272. 7205 A = 0
  273. 7210  HOME : HTAB 11: PRINT "* LIST ACCOUNTS *": REM  PAGE HEADING
  274. 7215  PRINT : PRINT " ACCT     NAME";: HTAB 28: PRINT "BGT'D AMT"
  275. 7220  FOR X = 0 TO 39: PRINT "=";: NEXT X: PRINT 
  276. 7225 PGCT = 0
  277. 7230 PGCT = PGCT +1
  278. 7235  IF PGCT >16  THEN  VTAB 24: INVERSE : INPUT "HIT RETURN FOR NEXT PAGE ";X$: NORMAL : GOTO 7210
  279. 7240 A = A +1
  280. 7245  IF A >24  THEN  GOTO 7270
  281. 7250  IF BGT(A) = 0  AND ACCT$(A) = ""  THEN  GOTO 7240: REM  SKIP UNUSED ACCTS
  282. 7255  HTAB 2: PRINT A;: HTAB 6: PRINT ACCT$(A);
  283. 7260 P = BGT(A): GOSUB 2400: HTAB 34 -C: PRINT BGT(A)
  284. 7265  GOTO 7230
  285. 7270  HTAB 10: PRINT "* BUDGET TOTAL *";
  286. 7275 P = TBGT: GOSUB 2400: HTAB 34 -C: PRINT TBGT
  287. 7280  VTAB 24: INVERSE : INPUT "HIT RETURN FOR MAIN MENU ";X$: NORMAL : GOTO 1000
  288. 7300  REM  * LIST ACCOUNTS ON PRINTER
  289. 7305  PRINT D$;"PR#1"
  290. 7310  PRINT  CHR$(9);"40N"
  291. 7315  PRINT  CHR$(2); CHR$(30)
  292. 7320  PRINT  TAB( 11);"* LIST ACCOUNTS *     ";RMO;"/";RDY;"/";RYR
  293. 7325  PRINT : POKE 36,2: PRINT "ACCT";: POKE 36,11: PRINT "NAME";: POKE 36,29: PRINT "BGT'D AMT"
  294. 7330  FOR X = 1 TO 39: PRINT "=";: NEXT X: PRINT 
  295. 7335  FOR A = 1 TO R
  296. 7340  IF BGT(A) = 0  AND ACCT$(A) = ""  THEN  GOTO 7360: REM  SKIP UNUSED ACCTS
  297. 7345  POKE 36,3: PRINT A;
  298. 7350  POKE 36,7: PRINT ACCT$(A);
  299. 7355 P = BGT(A): GOSUB 2400: POKE 36,(33 -C): PRINT BGT(A)
  300. 7360  NEXT A
  301. 7365  PRINT : POKE 36,11: PRINT "* BUDGET TOTAL *";
  302. 7370 P = TBGT: GOSUB 2400: POKE 36,(33 -C): PRINT TBGT
  303. 7375  PRINT  CHR$(9);"40N"
  304. 7380  REM  POKE 54,240:POKE 55,253
  305. 7382  PRINT D$;"PR#0"
  306. 7385  TEXT : GOTO 1000: REM  RETURN TO MAIN MENU
  307. 7500  REM  * BUDGET COMPARISON REPORT
  308. 7505  RESTORE : FOR X = 1 TO 12: READ MNAME$(X): NEXT X
  309. 7510 SW = 2: GOTO 5500: REM  GET ACTUAL EXPENSES
  310. 7520 SW = 2: GOTO 3000: REM  LOAD ACCT NAMES
  311. 7530 SW = 2: GOTO 6505: REM  LOAD BUDGETS
  312. 7540  HOME : HTAB 9: PRINT "* BUDGET COMPARISON *"
  313. 7550  VTAB 3: PRINT "TYPE 'END' FOR MAIN MENU"
  314. 7560  PRINT : PRINT "ENTER THE MONTH WHOSE ACTUAL EXPENSES": PRINT "YOU WISH COMPARED TO THE BUDGET."
  315. 7570 U = 8: VTAB U: INVERSE : INPUT "ENTER MONTH #: ";PR$:MO$ = PR$: NORMAL 
  316. 7575  IF MO$ = "END"  THEN  GOTO 1000
  317. 7580 MO =  INT( VAL(MO$))
  318. 7585  IF MO <1  OR MO >12  THEN  GOSUB 2100: GOTO 7570
  319. 7590  FOR X = 1 TO 24:MPRCT(X) = 0:BPRCT(X) = 0: NEXT X
  320. 7595 TMO = 0: REM  INIT VARIABLES
  321. 7600  FOR A = 1 TO 24:TMO = TMO +BAL(A,MO): NEXT A
  322. 7605  FOR A = 1 TO 24
  323. 7610  IF TMO < >0  THEN MPRCT(A) = ((BAL(A,MO)/TMO) *100)
  324. 7612 MPRCT(A) =  INT(MPRCT(A) +.5)
  325. 7615  IF TBGT < >0  THEN BPRCT(A) = ((BGT(A)/TBGT) *100)
  326. 7617 BPRCT(A) =  INT(BPRCT(A) +.5)
  327. 7620  NEXT A
  328. 7625  IF PRTYPE = 2  THEN  GOTO 7800: REM  PRINTER BUDGET REPORT
  329. 7630  REM  * SCREEN BUDGET REPORT
  330. 7635 A = 0:TDF = 0
  331. 7640  HOME : HTAB 9: PRINT "* BUDGET COMPARISON *": REM  PAGE HEADING
  332. 7650 : PRINT : PRINT "  ACCT    ";MNAME$(MO);"  %TOT   BGT  %TOT   DIFF"
  333. 7655  FOR X = 0 TO 39: PRINT "=";: NEXT X: PRINT 
  334. 7660 PGCT = 0
  335. 7665 PGCT = PGCT +1
  336. 7670  IF PGCT >16  THEN  VTAB 24: INVERSE : INPUT "HIT RETURN FOR NEXT PAGE";X$: NORMAL : GOTO 7640
  337. 7675 A = A +1
  338. 7680  IF A >24  THEN  GOTO 7740
  339. 7685  IF BAL(A,MO) = 0  AND BGT(A) = 0  AND ACCT$(A) = ""  THEN  GOTO 7675: REM  SKIP UNUSED ACCTS
  340. 7690  PRINT  LEFT$(ACCT$(A),9);
  341. 7695 P = BAL(A,MO): GOSUB 2400: HTAB 13 -C: PRINT BAL(A,MO);
  342. 7700 P = MPRCT(A): GOSUB 2400: HTAB 19 -C: PRINT MPRCT(A);
  343. 7705 P = BGT(A): GOSUB 2400: HTAB 24 -C: PRINT BGT(A);
  344. 7710 P = BPRCT(A): GOSUB 2400: HTAB 31 -C: PRINT BPRCT(A);
  345. 7715 X = (BAL(A,MO) -BGT(A)):X =  INT(X *100 +.5)/100:TDF = TDF +X
  346. 7720 P = X: GOSUB 2400: HTAB 36 -C: PRINT X
  347. 7735  GOTO 7665
  348. 7740  PRINT : PRINT "*TOTALS*";
  349. 7742 TMO =  INT(TMO *100 +.05)/100
  350. 7745 P = TMO: GOSUB 2400: HTAB 13 -C: PRINT TMO;
  351. 7749 TBGT =  INT(TBGT *100 +.05)/100
  352. 7750 P = TBGT: GOSUB 2400: HTAB 24 -C: PRINT TBGT;
  353. 7754 TDF =  INT(TDF *100 +.05)/100
  354. 7755 P = TDF: GOSUB 2400: HTAB 36 -C: PRINT TDF
  355. 7760  VTAB 24: INVERSE : INPUT "HIT RETURN FOR NEW MONTH SELECTION";X$: NORMAL : GOTO 7540
  356. 7800  REM  ** PRINTER BUDGET REPORT
  357. 7810 T1OVER = 0:T2UNDER = 0
  358. 7820  PRINT D$;"PR#1"
  359. 7830  PRINT  CHR$(9);"80N"
  360. 7840  PRINT  CHR$(2); CHR$(30)
  361. 7850  PRINT  TAB( 26);"* BUDGET COMPARISON *";
  362. 7860  PRINT  SPC( 5)"FOR: ";RMO;"/";RDY;"/";RYR
  363. 7870  PRINT : PRINT "ACCT#    ACCT NAME";
  364. 7880  POKE 36,27: PRINT MNAME$(MO);
  365. 7890  POKE 36,34: PRINT "%TOT    BGT    %TOT  *OVER BGT/UNDER BGT*"
  366. 7900  FOR X = 1 TO 75: PRINT "=";: NEXT X: PRINT : PRINT 
  367. 7910  FOR A = 1 TO 24
  368. 7920  IF BGT(A) = 0  AND ACCT$(A) = ""  THEN  GOTO 8030: REM  SKIP UNUSED ACCTS
  369. 7930 PK = 2:V$ =  STR$(A): GOSUB 80:
  370. 7940 PK = 6:V$ = ACCT$(A): GOSUB 80
  371. 7945 BAL(A,MO) =  INT(BAL(A,MO) *100 +.05)/100
  372. 7950 P = BAL(A,MO): GOSUB 2400:PK = (29 -C):V$ =  STR$(BAL(A,MO)): GOSUB 80
  373. 7960 P = MPRCT(A): GOSUB 2400:PK = (36 -C):V$ =  STR$(MPRCT(A)): GOSUB 80
  374. 7970 P = BGT(A): GOSUB 2400:PK = (44 -C):V$ =  STR$(BGT(A)): GOSUB 80
  375. 7980 P = BPRCT(A): GOSUB 2400:PK = (51 -C):V$ =  STR$(BPRCT(A)): GOSUB 80
  376. 7990 X = (BAL(A,MO) -BGT(A)):X =  INT(X *100 +.5)/100
  377. 7995 P = X: GOSUB 2400
  378. 8000  IF X >0  THEN PK = (60 -C):V$ =  STR$(X): GOSUB 85:T1OVER = T1OVER +X
  379. 8010  IF X <0  THEN PK = (70 -C):V$ =  STR$(X): GOSUB 85:T2UNDER = T2UNDER +X
  380. 8020  IF X = 0  THEN PK = 64:V$ = "*": GOSUB 85
  381. 8030  NEXT A
  382. 8035  FOR X = 1 TO 75: PRINT "-";: NEXT X: PRINT 
  383. 8040  PRINT :PK = 2:V$ = "*TOTALS*": GOSUB 80
  384. 8049 TMO =  INT(TMO *100 +.05)/100
  385. 8050 P = TMO: GOSUB 2400:PK = (29 -C):V$ =  STR$(TMO): GOSUB 80
  386. 8059 TBGT =  INT(TBGT *100 +.05)/100
  387. 8060 P = TBGT: GOSUB 2400:PK = (44 -C):V$ =  STR$(TBGT): GOSUB 80
  388. 8069 T1OVER =  INT(T1OVER *100 +.05)/100
  389. 8070 P = T1OVER: GOSUB 2400:PK = (60 -C):V$ =  STR$(T1OVER): GOSUB 80
  390. 8079 T2UNDER =  INT(T2UNDER *100 +.05)/100
  391. 8080 P = T2UNDER: GOSUB 2400:PK = (70 -C):V$ =  STR$(T2UNDER): GOSUB 85
  392. 8090 NET = T1OVER +T2UNDER:NET =  INT(NET *100 +.05)/100
  393. 8100  PRINT :PK = 2:V$ = "NET OVER-UNDER=": GOSUB 80:P = NET: GOSUB 2400:PK = 29 -C:V$ =  STR$(NET): GOSUB 85
  394. 8130  PRINT  CHR$(9);"40N"
  395. 8140  PRINT D$;"PR#0"
  396. 8150  TEXT : GOTO 1000: REM   MAIN MENU
  397. 9000  DATA  JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC